#ifndef __LINKSTACK_H__
#define __LINKSTACK_H__

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <unistd.h>
#include <string.h>

// 单链表节点：囗
typedef struct node
{
    int data;
    struct node *next;
}node, *list;

// 链式栈管理结构体
typedef struct 
{
    struct node *top; // 栈顶元素 囗 --> 囗 --> 囗 -->  囗  --> NULL
                      //          ↑
                      //         top
    int size;
}stack;

// API
stack *init_stack();
bool push(stack *s, list newnode);
bool pop(stack *s, list *pnode);
bool is_empty(stack *s);
list new_node(int num);
void destroy_init(stack *s); // 释放所有节点，留下管理结构体为初始状态
void destroy(stack *s); // 释放所有内存包括管理结构体

#endif